home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / arrays.exe / ARRAYS.C < prev    next >
C/C++ Source or Header  |  1991-10-29  |  1KB  |  64 lines

  1. /* ARRAYS.C 1.00 DEMONSTRATION OF C LANGUAGE ARRAY DIFFICULTIES
  2.  
  3.     V01 L00    1991-10-29-11:13 develop array case based on problem raised
  4.         by Barry Gombert.  How do you put a pointer to an array in
  5.         a struct definition?
  6.  
  7.         */
  8.  
  9. #include <assert.h>
  10. #include <stdlib.h>
  11.  
  12.  struct IBlock
  13.  
  14.     {unsigned long (*Band)[];};
  15.  
  16.  struct JBlock
  17.  
  18.     {unsigned long *BandArray;};
  19.  
  20.  
  21. int main(int argc, char *argv[])
  22.  
  23.    { /* figure out some Band array information */
  24.  
  25.  
  26.    unsigned long Band1[10],
  27.  
  28.          (*BandAid)[10];
  29.  
  30.    struct IBlock Block1;
  31.  
  32.    struct JBlock Block2;
  33.  
  34.    int i;
  35.  
  36.    i = sizeof(Band1)/sizeof(Band1[0]);
  37.    while (i--)
  38.      {Band1[i] = ((unsigned long)(1) << 16) + i; }
  39.  
  40.    Block1.Band = Band1;
  41.     /* The problem.  The following line is a *big* clue! */
  42.  
  43.    Block1.Band = (unsigned long (*)[]) Band1;
  44.  
  45.    assert(Block1.Band == Band1);
  46.  
  47.    assert(Block1.Band == (unsigned long (*)[]) Band1);
  48.  
  49.    assert((*Block1.Band)[0] == Band1[0]);
  50.  
  51.    Block2.BandArray = Band1;
  52.  
  53.    assert(Block2.BandArray == Band1);
  54.  
  55.    assert(Block2.BandArray[0] == Band1[0]);
  56.  
  57.    assert(*(Block2.BandArray+0) == Band1[0]);
  58.  
  59.    BandAid = Band1;
  60.  
  61.    BandAid = (unsigned long (*)[]) Band1;
  62.  
  63.    return 0;}
  64.